package ioc;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 解析XML配置文件，获取Bean定义
 */
public class XmlParser {
    public List<BeanDefinition> parseXml(String xmlPath) throws DocumentException {
        List<BeanDefinition> beanDefinitions = new ArrayList<>();

        // 获取XML文件的输入流
        InputStream inputStream = getClass().getClassLoader().getResourceAsStream(xmlPath);

        // 创建SAXReader对象
        SAXReader saxReader = new SAXReader();

        // 读取XML文件，获取Document对象
        Document document = saxReader.read(inputStream);

        // 获取根元素
        Element rootElement = document.getRootElement();

        // 获取所有的bean元素
        List<Element> beanElements = rootElement.elements("bean");

        // 解析每个bean元素
        for (Element beanElement : beanElements) {
            BeanDefinition beanDefinition = new BeanDefinition();

            // 获取id和class属性
            String id = beanElement.attributeValue("id");
            String className = beanElement.attributeValue("class");

            beanDefinition.setId(id);
            beanDefinition.setClassName(className);

            // 获取所有的property子元素
            List<Element> propertyElements = beanElement.elements("property");
            for (Element propertyElement : propertyElements) {
                String name = propertyElement.attributeValue("name");
                String value = propertyElement.attributeValue("value");
                beanDefinition.addProperty(name, value);
            }

            beanDefinitions.add(beanDefinition);
        }

        return beanDefinitions;
    }
}
